# Q06 - Bookstore Inventory Price Updater

# ----------------------------------------------
# Declare constant(s) below this line
# ----------------------------------------------
DISCOUNT_RATE = 0.10          # 10% discount
FILE_NAME = "books.txt"
COLUMN_WIDTHS = [ 35, 18, 17 ]
HEADER_ROW = ["Book Title", "Original Price", "Discounted ($)"]
DIVIDER = "-" * sum(COLUMN_WIDTHS)

# ----------------------------------------------
# Declare variable(s) below this line
# ----------------------------------------------
tbl_title = []
tbl_price = []

# ----------------------------------------------
# write subprogram(s) below this line
# ----------------------------------------------

def load_file(filename):
    f = open(filename, "r")
    lines = f.readlines()
    for line in lines:
        data = line.split(',')
        tbl_title.append(data[0])
        tbl_price.append(float(data[1]))
    f.close() 

def save_file(filename):
    f = open(filename, "w")
    for i in range(len(tbl_title)):
        f.write(tbl_title[i] + ',' + str(tbl_price[i]) + '\n')
    f.close()

def discounted(original):
    return int(original * (1-DISCOUNT_RATE))

def print_table():
    print(f"{HEADER_ROW[0]:{COLUMN_WIDTHS[0]}}", end="")
    print(f"{HEADER_ROW[1]:^{COLUMN_WIDTHS[1]}}", end="")
    print(f"{HEADER_ROW[2]:^{COLUMN_WIDTHS[2]}}", end="\n")
    print(DIVIDER)
    for i in range(len(tbl_title)):
        print(f"{tbl_title[i]:{COLUMN_WIDTHS[0]}}", end="")
        print(f"{tbl_price[i]:^{COLUMN_WIDTHS[1]}}", end="")
        print(f"{discounted(tbl_price[i]):^{COLUMN_WIDTHS[2]}}", end="\n")
    print(DIVIDER)
    average = round(sum(tbl_price) / len(tbl_price),2)
    print(f"{'Overall Average Price:':{COLUMN_WIDTHS[0]}}{average:^{COLUMN_WIDTHS[1]}}\n")

def get_input():
    print("Changing book price")
    title = input("Enter title of book to change price: ")
    price = float(input("Enter new price: "))
    return title, price

def change_price(title, price):
    if not title in tbl_title:
        print("** ERROR ** title not found.")
        return False
    index = tbl_title.index(title)
    tbl_price[index] = price
    return True

# ----------------------------------------------
# Write your code below this line
# ----------------------------------------------

load_file(FILE_NAME)
while True:
    print_table()
    title, price = get_input()
    if change_price(title, price):
        save_file(FILE_NAME)